#include "State.h"
#include "Behaviour.h"

using namespace game_engine::components;

///////////////////////////////////////////////////////////////////////////////
// Constructors and Destructors
///////////////////////////////////////////////////////////////////////////////

State::State(void)
    : fsm(NULL), nextState(NULL)
{
}

State::State(Behaviour *parent)
    : fsm(parent)
{
    nextState = this;
}

State::~State(void)
{
}

///////////////////////////////////////////////////////////////////////////////
// Other public methods
///////////////////////////////////////////////////////////////////////////////

void State::onEnter(void) throw(...)
{
    // Default implementation
    nextState = this;
}

void State::onLoop(const FLOAT32) throw(...)
{
    // Default implementation does nothing
}

void State::onExit(void) throw(...)
{
    // Default implementation
    nextState = NULL;
}

///////////////////////////////////////////////////////////////////////////////
// Getters
///////////////////////////////////////////////////////////////////////////////

State* State::getNextState(void) const
{
    return nextState;
}

///////////////////////////////////////////////////////////////////////////////
// Setters
///////////////////////////////////////////////////////////////////////////////
